package com.lasun.server;
import java.util.List;

import io.netty.bootstrap.ServerBootstrap;
import io.netty.channel.ChannelInitializer;
import io.netty.channel.ChannelPipeline;
import io.netty.channel.EventLoopGroup;
import io.netty.channel.nio.NioEventLoopGroup;
import io.netty.channel.socket.SocketChannel;
import io.netty.channel.socket.nio.NioServerSocketChannel;
import io.netty.handler.codec.LengthFieldBasedFrameDecoder;
import io.netty.handler.codec.LengthFieldPrepender;
import io.netty.handler.codec.string.StringDecoder;
import io.netty.handler.codec.string.StringEncoder;
import io.netty.util.CharsetUtil;

public class TcpServer {
//	private static final Logger logger = Logger.getLogger(TcpServer.class);
//	private static final String IP = "127.0.0.1";
	private static final int PORT = 9999;
	/** 用于分配处理业务线程的线程组个数 */	
	protected static final int BIZGROUPSIZE = Runtime.getRuntime().availableProcessors()*2;// 默认
	/** 业务出现线程大小*/	
	protected static final int BIZTHREADSIZE = 4;
	private static final EventLoopGroup bossGroup = new NioEventLoopGroup(BIZGROUPSIZE);
	private static final EventLoopGroup workerGroup = new NioEventLoopGroup(BIZTHREADSIZE);
	private static MessageServer iMessagServe ; 
	protected static void run(String ip,MessageServer iMessagServer) throws Exception {
		iMessagServe=iMessagServer;
		ServerBootstrap b = new ServerBootstrap();
		b.group(bossGroup, workerGroup);
		b.channel(NioServerSocketChannel.class);
		b.childHandler(new ChannelInitializer<SocketChannel>() {
			@Override
			public void initChannel(SocketChannel ch) throws Exception {
				ChannelPipeline pipeline = ch.pipeline();
				pipeline.addLast("frameDecoder", new LengthFieldBasedFrameDecoder(Integer.MAX_VALUE, 0, 4, 0, 4));
				pipeline.addLast("frameEncoder", new LengthFieldPrepender(4));
				pipeline.addLast("decoder", new StringDecoder(CharsetUtil.UTF_8));
				pipeline.addLast("encoder", new StringEncoder(CharsetUtil.UTF_8));
				pipeline.addLast(new TcpServerHandler(iMessagServe));
			}
		});
		b.bind(ip, PORT).sync();
//		logger.info("TCP服务器已启动");
		System.out.println("TCP服务器已启动...");
	}	
	protected static void shutdown() {
		workerGroup.shutdownGracefully();
		bossGroup.shutdownGracefully();
		System.out.println("关闭TCP服务器...");
	}
	public static void main(String[] args) throws Exception {
//		logger.info("开始启动TCP服务器...");
		System.out.println("开始启动TCP服务器...");
//		TcpServer.run(args[0]);
	}
	
}